package binary_tree.Heap;

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;

public class TopK {
    public int[] smallestK(int[] arr, int k) {
    int[] ret=new int[k];
    if(arr==null||k==0){
        return ret;
    }
    //求最小值使用最大堆
        //优先级队列使用
        Queue<Integer> queue=new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });
    for(int value:arr){
        if(queue.size()<k){
            queue.offer(value);
        }else{
            if(value<queue.peek()){
                queue.poll();
                queue.offer(value);
            }
        }
    }
    for(int i=0;i<k;i++){
        ret[i]=queue.poll();
    }
    return ret;
    }
}
